package com.udp;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

/**传递基本数据类型
 * 客户端
 */
public class BasicTypeClient {
    public static void main(String[] args) {
        long n = 2000L;//定义long类型 所以数据后面加 L
        ByteArrayOutputStream bos = null;//字节数组输出流
        DataOutputStream dos = null;//数据的输出流对象
        DatagramSocket datagramSocket =null;
        try{
            //现在传输的是Long类型，要想传输
            // 就必须转为Byte字节数组，DatagramPacket封包的是Byte字节数组
            //这里要分开写，不可以合起来写 因为dos和bos都要用到
            //将基本数据类型的数据输出到ByteArrayOutputStream()中，
            // 再ByteArrayOutputStream()当中的toByteArray方法，
            //将基本数据类型数据转换成字节数组类型
             bos = new ByteArrayOutputStream();
            dos = new DataOutputStream(bos);
            //等于通过DataOutputStream将数据写入ByteArrayOutputStream
            dos.writeLong(n);
            //通过toByteArray()，将基本数据类型数据转换成字节数组类型
            byte[] arr = bos.toByteArray();
            //创建DatagramPacket对象包装，再发送
            DatagramPacket dp = new DatagramPacket(arr, arr.length,new InetSocketAddress("127.0.0.1",9999));
            datagramSocket = new DatagramSocket(9000);//绑定客户端发送消息的端口
            datagramSocket.send(dp);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(bos != null){
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(dos != null){
                try {
                    dos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(datagramSocket != null){
                datagramSocket.close();
            }
        }
    }
}
